/**
 * 用户权限指令
 * @directive 单个权限验证（v-auth="xxx"）
 * @directive 多个权限验证，满足一个则显示（v-auths="[xxx,xxx]"）
 * @directive 多个权限验证，全部满足则显示（v-auth-all="[xxx,xxx]"）
 */
export function authDirective(app) {
  // 多个权限验证，满足一个则显示（v-auth="[xxx,xxx]"）
  app.directive("auth", {
    mounted: authsDirective,
    updated: authsDirective,
  });

  // 多个权限验证，全部满足则显示（v-auth-all="[xxx,xxx]"）
  app.directive("auth-all", {
    mounted: authAllDirective,
    updated: authAllDirective,
  });
}

// 单个权限验证（v-auth="[xxx,xxx]"）
function authsDirective(el, binding) {
  // 获取传入的值
  let perms = Array.isArray(binding.value) ? binding.value : [binding.value];
  // 获取用户权限点
  const { auths: userAuths } = useUserInfoStore();
  // 使用 some 方法检查是否有任何一个权限匹配
  let flag = userAuths.some(val => perms.includes(val));
  // 如果没有匹配的权限，则移除元素
  if (!flag) el?.parentNode?.removeChild(el);
}

// 多个权限验证，全部满足则显示（v-auths="[xxx,xxx]"）
function authAllDirective(el, binding) {
  // 获取传入的值
  let perms = Array.isArray(binding.value) ? binding.value : [binding.value];
  // 获取用户权限点
  const { auths: userAuths } = useUserInfoStore();
  // 使用 every 方法检查是否所有权限都匹配
  let flag = perms.every(val => userAuths.includes(val));
  // 如果没有匹配的权限，则移除元素
  if (!flag) el?.parentNode?.removeChild(el);
}
